\chapter{Einleitung}
\label{chap:einleitung}

\section{Motivation}
\label{sec:motivation}
Dank der raschen Entwicklung der Hardware und zahlreicher Betriebssysteme boomt der Markt der Tablets und Smartphones \cite{bib:statistaumsatz} und die Prognosen sagen weiteren Aufstieg voraus \cite{bib:statistaprognose}. Mit diesem Aufschwung \"andern sich die Anforderungen der Menschen an mobile Endger\"ate und die Anwendungsgebiete und -kontexte der Applikationen in diesem Bereich werden somit immer umfangreicher und komplexer.\\
\\
Nicht nur im Sektor der mobilen Applikationen stellen dabei verteilte und heterogene Datenquellen eine Herausforderung dar. Im Hinblick auf die Ressourcenknappheit zeigt sich die bedeutende Rolle einer suffizienten Schnittstellengestaltung. Dabei k\"onnen sowohl die Asynchronit\"at bei Anfragen der unterschiedlichen Quellen als auch die Verarbeitung und das Herausfiltern der gew\"unschten Informationen aus beachtlichen Datenmengen Schwierigkeiten bereiten und bei mobilen Ger\"aten die Performance beeintr\"achtigen. Die zu \"ubertragende Datenmenge kann durch fehlende Anpassung der Schnittstellen an die Anforderungen der mobilen Endger\"ate -  sei es durch beschr\"anktes Datenvolumen, geringere Rechenleistung oder \"Ubertragungsgeschwindigkeit - den komplikationslosen Zugriff durch einzelne mobile Netzwerke verhindern.\\
\\
Die verteilte Speicherung der Daten bietet dabei gleichzeitig viele Vorteile. Aufgrund der Lastverteilung und verteilter Fehlererholung wirkt sich eine solche Architektur positiv auf die Performanz des gesamten Systems aus. Zus\"atzlich tr\"agt sie zur Zuverl\"assigkeit, Verf\"ugbarkeit bei und erleichtert die Erweiterung eines Systems. Eine derartige Datenaufteilung kann durch das geographisch verteilte Gebilde einer Unternehmensform und ihrer Filialen bzw. Niederlassungen gegeben sein \cite{bib:db2unimainz}.\\
\\

\section{Ziel der Arbeit}
\label{sec:zielderarbeit}
Die Bachelorarbeit ist in Kooperation mit pAppermint Solutions GmbH - Agentur f\"ur App Entwicklung [\url{http://pappermint.de/}] entstanden.\\
\\
Ziel dieser These ist die Konzeption einer plattform\"ubergreifenden Modull\"osung zum Zugriff und zur Verschmelzung der heterogenen Datenmengen zu einer einzelnen Datenmenge durch eine theoretische Abfassung und Planung, um anschlie\ss{}end ein m\"ogliches angewandtes Implementierungsbeispiel zu realisieren.\\
\\
Es soll dabei ein System zur Schnittmengenfindung und Zusammenfassung von Daten aus autonomen, heterogenen Quellen auf der Serverseite zur Bereitstellung \"uber ein Interface f\"ur mobile Applikationen entstehen.\\
\\
Mit diesem Modul als Teil eines "`Backend as a Service"'-Produkts der Firma, gennant "`pAppermint Center"', sollte es auch f\"ur Laien m\"oglich sein, die Konfigurationen f\"ur das Anbinden der Datenquellen anzugeben, gezielt Datens\"atze auszusuchen, Datenmenge durch Erstellen und Anwenden von Filtereigenschaften, entweder lokal oder anhand der gestellten Anfrage zu reduzieren und in einer bestimmten Formatierung \"uber nur eine
Schnittstelle anzubieten. Damit soll infolge der limitierten Ressourcen eine Auslagerung m\"oglichst vieler Arbeitsschritte auf die Serverseite erfolgen.



%
%---------------------------------------------------------------------
%
\chapter{Anforderungen}
\label{chap:anforderungen}
Nach gr\"undlicher Ausarbeitung der projektbezogenen Zielsetzung in Kooperation mit pAppermint Solution GmbH [Kapitel \ref{sec:zielderarbeit}] werden f\"ur das zu entwickelnde Schnittstellenmodul folgende Anforderungen festgelegt und definiert.\\

	\section{Datenquellenerfassung}
	\label{sec:anfdatenquellen}
	Die externen Datenquellen dienen als Informationsursprung und sollen an das System angebunden werden k\"onnen. Dabei erlaubt das System dem Administrator, \"uber eine Benutzeroberfl\"ache die einzelnen Quellen zu bestimmen. Zus\"atzlich soll es m\"oglich sein, f\"ur die einzelnen Quellen jeweils Konfigurationseingaben zu definieren. Diese Informationen werden lokal in einer Datenbank gespeichert und schaffen die Voraussetzung f\"ur das Herstellen einer Verbindung zu den Quellen, um die gew\"unschten Informationen abfragen zu k\"onnen.\\
	Im Rahmen der Arbeit beschr\"anke ich mich auf die praktische Umsetzung von zwei Quellarten, einer relationalen Datenbank und einer CSV-Datei. Durch die Konzeption der Softwarearchitektur soll die Implementierung weiterer Quellarten erleichtert werden.
	
	\section{Regeln f\"ur die Verkn\"upfung der Daten}
	\label{sec:anfjoin}
	Das System soll in der Lage sein, mehrere Datens\"atze anhand fest vordefinierter Regeln zusammen zu kombinieren. Hiermit ist die Simulation einer Join-Operation eines Datenbankmanagementsystems einer relationalen Datenbank gemeint. Eine entsprechende vertikale und horizontale Filterung wird in bei dem n\"achsten Anforderungspunkt [Kapitel \ref{sec:anffilterung}] gennant. Die relevanten Spalten als Verkn\"upfungsregeln sollen bei den Konfigurationsschritten am Anfang und mit Hilfe eines Userinterfaces ausw\"ahlbar sein.\\
Au\ss{}erdem soll das System gegebenenfalls vorhandene Abh\"angigkeiten zwischen zwei Datens\"atzen automatisch erkennen und Vorschl\"age machen k\"onnen.
	
	\section{Datenfilterung}
	\label{sec:anffilterung}
	Dieser Punkt der Anforderung beschreibt die F\"ahigkeit, die Menge der Datens\"atze zu reduzieren. Eine Projektionsfunktion soll eine M\"oglichkeit bieten, vorgew\"ahlte Datens\"atze "`vertikal"' zu filtern. Eine Selektionsfunktion dient der "`horizontalen"' Filterung der Datens\"atze.\footnote{Die Selektion wurde als Nice-to-Have eingestuft.}\\
Im Vergleich zu einer Tabelle werden bei der Projektion jeweils nur bestimmte Spalten und bei der Selektion nur bestimmte Zeilen verarbeitet und weitergegeben.
	
	\section{Cache Mechanismus}
	\label{sec:anfcache}
	Die zuvor aufwendig gesammelten Daten sollen unter Einsatz eines sogennanten Cachings zwischengespeichert werden. Auf technische Details des Mechanismus wird im Kapitel Grundlagen eingegangen. Mit diesem zus\"atzlichen Feature soll die tempor\"are Zwischenspeicherung der Daten f\"ur eine bestimmte Zeitspanne g\"ultig sein. Die Cachedauer als ein Teil des Konfigurationsassistenten soll vom Administrator festgelegt werden k\"onnen.
	
	\section{Auswahl der Datenformation}
	\label{sec:anfdatenformation}
	In welchem Format sollen die Daten am Ende bereitgestellt werden? Diese Frage
sollte bei der Konfiguration der Schnittstelle endg\"ultig beantwortet werden. Die Auswahl sollte ebenso in einer lokalen Datenbank zum Abruf bereitgestellt werden.\\
Im Rahmen dieser Arbeit beschr\"anke ich mich in Absprache mit pAppermint GmbH auf \texttt{JSON} [Kapitel \ref{sec:grundjson}] als Ausgabeformat.

\section{Datenbereitstellung}
\label{sec:anfinterface}
Die Daten sollen f\"ur Clientabfragen \"uber ein Kommunikationsinterface bereitgestellt werden. Die Schnittstelle soll eine Bezeichnung beziehungsweise eine Identifikationsnummer besitzen und von der Client-Applikation mit Hilfe einer URI erreichbar sein.



%
%---------------------------------------------------------------------
%
\chapter{Grundlagen}
\label{chap:grundlagen}
Als Grundlage f\"ur das Verst\"andnis der projektbezogenen Realisierung erfolgt in diesem Kapitel zun\"achst eine Beschreibung der relevanten Entwicklungsanwendungen und -methoden. Der konkrete technische Einsatz w\"ahrend der Implementierung wird dabei an den entsprechenden Stellen der Arbeit bei der Beschreibung des Projektes erl\"autert.\\

\section{Design Pattern}
	\label{sec:designpattern}
	Derartige Entwurfsmuster bieten den Entwicklern allgemeine L\"osungsans\"atze, die sich im Laufe der Softwareentwicklungsgeschichte durchgesetzt beziehungsweise f\"ur Probleme in einem bestimmten Kontext als sinnvoll erwiesen haben.\\
	\\
	\textit{"`Bei Pattern handelt es sich weniger um eine Technologie [...], als um eine Kultur der Dokumentation und Unterst\"utzung guter Softwarearchitektur"'} \cite{bib:patternvlluckas}.\\
\\
Die unten aufgef\"uhrten Pattern sollen hier beispielhaft vorgestellt und beschrieben werden, da insbesondere diese eine bedeutende Rolle bei der Konzeption der projektbezogenen Datenquellenanbindung spielen. Bei der Vielf\"altigkeit der vorhandenen Design Patterns kann es sich dabei nur um eine auszugsweise Darstellung handeln.
	
	\subsection{MVC Pattern}
	\label{subsec:mvc}
	Das Model-View-Controller Pattern wurde 1970 von Trygve Reenskaug f\"ur Smalltalk entworfen. Trotz zahlreicher Weiterentwicklungen und Implementierungen basiert das grundlegende Prinzip dieses Entwurfmusters auf der Aufteilung des Codes in drei Einheiten \textbf{Model}, \textbf{View}, \textbf{Controller} \cite{bib:zendbuch}[Seite10:Overview of MVC architecture].
	
	\begin{figure}[htbp]
		\centering
		\includegraphics[width=10cm]{media/zendmvc.PNG}
		\caption{Model-View-Controller\cite{bib:zendseitemvc}}
		\label{fig:mvc}
	\end{figure}
	
	\newpage
	
	\begin{itemize}
		\item \textbf{Model} \\
		Hier wird die elementare Funktionalit\"at der Anwendung wie Methoden der Gesch\"aftslogik und Datenbankzugriff definiert.\cite{bib:zendseitemvc}
		
		\item \textbf{View}\\
		Dieser Bereich dient als Oberfl\"ache und stellt haupts\"achlich die Interaktionsfunktionen mit dem Benutzer dar. Vom Controller werden dabei Informationen an diese Stelle \"ubermittelt, um sie f\"ur den User darzustellen.\\ Beispielsweise kann man hier in einer Webanwendung HTML und CSS Code finden.\cite{bib:zendseitemvc}
		
		\item \textbf{Controller}\\
		Bei dieser Einheit des Entwurfmusters handelt es sich um die Steuerungslogik, die die restlichen Teile des MVC-Patterns miteinander verbindet. Diese deligiert, welche View dargestellt werden soll und manipuliert das Model.\cite{bib:zendseitemvc}
	\end{itemize}

	Der Einsatz der MVC-Pattern bietet folgende Vorteile:\cite{bib:zendbuch}
	
	\begin{itemize}
		\item Unterst\"utzung bei der Organisation des Codes und beim Vermeiden von Duplikaten
		\item Vereinfachung der Zusammenarbeit der Entwickler
		\item Vereinfachung (nachtr\"aglicher) \"Uberarbeitungen, z. B. an der Steuerlogik
		\item F\"ahigkeit zur vielf\"altigen separaten Dastellung gleicher Informationen
	\end{itemize}
	Nichtsdestotrotz bedeutet der Gebrauch von MVC einen gewissen Mehraufwand. Bei einfachen und schlichten Anwendungen rechtfertigt demzufolge der Nutzen den Aufwand der Implementierung der MVC oftmals nicht.
	
	\subsection{Adapter Pattern}
	\label{subsec:adapterpattern}
	Adapter sind aus der realen Alltagswelt bekannt. Eines der gel\"aufigsten Beispiele sind Stromadapterstecker. Einige von ihnen sind simpel gestaltet und passen sich lediglich der Form der jeweiligen Schnittstellen an. Andere k\"onnen eine komplexe Struktur aufweisen und zus\"atzlich \"uber M\"oglichkeiten zur Stromst\"arken\"anderung oder zur Umwandlung von Gleich- in Wechselstrom verf\"ugen. In der Welt der objektorientierten Softwareentwicklung verstehen sich Adapter als Klassen, die \"ahnliche Funktionen vermitteln. \cite{bib:designpattern}

\begin{figure}[htbp]
	\centering
	\includegraphics[width=10cm]{media/designpatter_adapter.PNG}
	\caption{Adapter Illustrierung\cite{bib:designpattern}}
	\label{fig:adapter}
\end{figure}

Angenommen sei ein Szenario, in dem f\"ur ein bestehendes System eine externe Bibliotheksklasse ben\"otigt wird, die allerdings eine anders definierte Schnittstelle besitzt als das urspr\"ungliche System. Mit dem Einbau eines Adapters am \"Ubergang zwischen dem System und der Bibliotheksklasse vermeidet man eine umfangreiche Adaption an eine der beiden Seiten.\\
Das Adapter-Entwurfsmuster kann auch zum Einsatz kommen, um eine zur Wiederverwendung geeignete Klasse zu errichten, welche mit noch nicht vorhersehbar definierten Klassen oder Schnittstellen funktionieren soll. Eine andere Einsatzm\"oglichkeit stellt die Zusammenarbeit mit verschiedenen Unterklassen dar, wenn das Umgestalten der Schnittstellen als unzweckm\"a\ss{}ig erachtet wird \cite{bib:entwurfsmusterbuchgammahelm}[Seite:173].

	\subsection{Singleton Pattern}
	\label{subsec:singeltonpattern}
	Das Singleton-Prinzip besagt, dass zu einem Zeitpunkt immer nur eine Instanz einer Klasse existieren kann. Die Klasse selbst ist f\"ur die Instanziierung und Verwaltung ihrer eigenen Objekte verantwortlich und stellt eine globale Schnittstelle f\"ur den Zugriff darauf bereit \cite{bib:designpattern}. Diese wird \"ublicherweise als \texttt{getInstance()} bezeichnet.//
Dieses Entwurfsmuster kann au\ss{}erdem zur Anwendung kommen, "`wenn das einzige Exemplar durch Bildung von Unterklassen erweitbar sein soll und die Klienten in der Lage sein sollen, das erweiterte Exemplar ohne Modifikation ihres Codes verwenden zu k\"onnen"' \cite{bib:entwurfsmusterbuchgammahelm}[Seite:157].	
	
	\subsection{Factory Methode}
	\label{subsec:factorymethode}
	Im Rahmen einer Problemstellung, bei der die Instanziierung eines bestimmten Objekttypes ohne eine Abh\"angigkeit von seiner konkreten Implementierung stattfinden soll, schafft die Factory-Methode sinnvolle Abhilfe. Es entsteht eine Schnittstelle, welche die Details der Instanziierung bewerkstelligt \cite{bib:patternvlluckas}.\\
	Die darunterliegende Grafik \ref{fig:factory} illustriert einen beispielhaften Anwendungsfall einer Pizzeria. Sie h\"angt von einer abstrakten Klasse "`Pizza"' ab, die das Produkt repr\"asentiert. Die Klasse implementiert die Erzeugungsmethode, die die Logik der Instanziierung beinhaltet. Erst nach dem Eingang einer Bestellung ist der konkrete Typ des Produkts bekannt und die Produktion kann in Bewegung gesetzt werden. Vorteilhaft dabei ist folglich, dass genau das ben\"otigte Produkt angefertigt wird.\\
	\\
	Die Factory-Methode findet Anwendung in folgenden Szenarien: \cite{bib:entwurfsmusterbuchgammahelm}[Seite:132], \cite{bib:patternvlluckas}
	
	\begin{itemize}
		\item wenn eine Klasse nur den Zeitpunkt zur Erzeugung eines Objekts kennt, aber die Klassen der anzulegenden Objekte nur zur Laufzeit bestimmt werden k\"onnen.
		\item wenn eine Klasse den Unterklassen die Erzeugung der konkreten Objekte \"uberlassen m\"ochte. 
		\item bei einem Framework, in dem \texttt{Creator} und \texttt{Product} nur noch \"uber Abstraktionen miteinander verbunden sind.
	\end{itemize}
	
	\begin{figure}[htbp]
		\centering
		\includegraphics[width=12cm]{media/patternfactorypizza.PNG}
		\caption{Veranschaulichung der Factory-Methode\cite{bib:designpattern}}
		\label{fig:factory}
	\end{figure}
	
\section{Entwicklungsumgebung und Werkzeuge}
\label{sec:grundentwicklungwerkzeuge}

	\subsection{Zend Framework}
	\label{subsec:zend}
	Zend Framework wurde von \texttt{Zend Technologies} \cite{bib:zendctech} mit Hauptsitz in Cupertino, USA basierend auf dem Prinzip der Objektorientierung in der Programmiersprache PHP entwickelt. Die erste produktive Version von Zend erschien in 2007 \cite{bib:zendseite}. Trotz der jungen Geschichte ist Zend ein m\"achtiges Open Source Framework mit einer gro\ss{}en aktiven und einsteigerfreundlichen Community \cite{bib:zendseite}.\\ 
\\
Zu den Vorteilen von Zend z\"ahlen die auf die neue BSD \footnote{New BSD License \url{http://framework.zend.com/license}.} und Contributor Licence Agreement (CLA) basierende Lizenzierung und Qualit\"atssicherung \cite{bib:zendbuch}[Seite3:Licensing]. Der Quellcode ist mit Unitests gepr\"uft und muss eine minimale Testabdeckung von 80\% vorweisen. \cite{bib:zendbuch}[Seite2:Quality]. Mit seiner Architektur als lose-gekoppelte Komponentensammlung \cite{bib:zendbuch}[Seite2] erlaubt es das Einsetzen oder das einfache Ableiten seiner Klassen einzeln oder in Kombination der Komponenten. Dadurch wird seitens der Hersteller die Effektivit\"at und Effzienz \cite{bib:zendseite}, aber auch Flexibilit\"at \cite{bib:zendbuch}[Seite 3:Flexibility] sichergestellt.\\
	% Einfachheit geh\"ort ebenso zu den st\"arken von Zend Framework. 
	Die bei der Design des Framework angewandte "`80/20"'-Regel sieht vor, dass jede Komponente 80\% der Anwendungsf\"alle abdeckt und die restlichen 20\% f\"ur die gesch\"aftsspezifschen Anforderungen\cite{bib:zendbuch}[Seite 3:Simplicity] verbleiben. Das Framework bietet dar\"uber hinaus eine Reihe von Out-of-the-box Features \cite{bib:zendbuch}[Seite4]:
	\begin{itemize}
		\item Model View Controller [Kapitel \ref{subsec:mvc}]
		\item Authentifikation und Autorisierung
		\item Datenbankabstraktion
		\item Session Management
		\item Suche und Indizierung 
		\item Web Services 
		\item Mail Support 
	\end{itemize}
	
	F\"ur die Entwicklung des Schnittstellenmoduls setzt die Agentur pAppermint Solution GmbH [Kapitel \ref{chap:anforderungen}] das Zend Framework in der Version 1.12 ein, das PHP ab Version 5.2 fordert. Zend Framework existiert au\ss{}erdem in der 2.5.5 Version(Released 2013-10-31). Diese ben\"otigt PHP 5.3+. Zendframework2, als Weiterentwicklung von Zendframework1 entstanden, verwendet einen vollst\"andig objektorientierten Code. Zus\"atzlich kommen einige neue PHP-Features wie Namensr\"aume und Lambda-Funktionen zum Einsatz \cite{bib:zendseiteabout}.\\
	
	\subsubsection{Klassenbennenung}
	Entsprechend der Namensgebung der Kalssen in Zend, schreibt das Framework bei der Namesgebung eigener Klassen bzw. externer Bibliotheken vor, dass der Name der Klasse der Ordnerstruktur dieser Klasse entspricht. Dies bedeutet konkret das obligate Repr\"asentieren des Pfads zur Datei im Klassennamen.\\
Folgendes Beispiel soll der Veranschaulichung dienen:\\
\texttt{Zend\_Session\_Namespace} wird zur Laufzeit durch die Autoload-Funktion des Frameworks in \texttt{Zend/Session/Namespace.php} aufgel\"ost.
	
	\subsubsection{Installation des Frameworks}
	Die Installation ist sehr einfach. Sie beschr\"ankt sich auf ein simples Entpacken des Framework-Archivs aus dem "`library"'-Ordner und das Hinzuf\"ugen des Pfades zum Ordner "`library"' zur \texttt{include\_path} Variable
in der \texttt{php.ini}.
	
	\subsubsection{Zend Framework Command Line Console Tool}
	\label{subsubsec:shell}
	Zum Framework geh\"ort eine Shell, die im "`bin"'-Ordner zu finden ist. Diese kann ebenfalls entpackt und der Pfad an der Umgebungsvariable des Betriebsystems angeh\"angt werden. Anschlie\ss{}end kann die Shell mit dem Befehl \texttt{zf} aufgerufen werden. Mit ihrer Hilfe k\"onnen automatisierte Vorg\"ange, beispielsweise zum Aufstellen eines neuen Projektes oder Hinzuf\"ugen von Modulen zu einer Applikation, durchgef\"uhrt werden.

	\begin{figure}[htpd]
		\centering
		\includegraphics[width=14cm]{media/zendshellklein.PNG}
		\caption{Zend-Konsole}
		\label{fig:shell}
	\end{figure}
	
	\newpage
	
	\subsubsection{Applikationaufbau in Zend}
	\label{subsubsec:appzend}
	Nach der Erstellung eines Projektes mit Hilfe der Zend-Konsole [Kapitel \ref{subsubsec:shell}] wird eine
Basisordnerstruktur, \"ahnlich der folgenden Grafik, erstellt.

\begin{figure}[htpd]
		\centering
		\includegraphics[width=4cm]{media/zendordner.PNG}
		\caption{Ordnerstruktur eines Zend-Projektes}
		\label{fig:zendordner}
	\end{figure}

Diese Struktur verf\"ugt \"uber vier Hauptbereiche: \texttt{application}, \texttt{library}, \texttt{public}, and \texttt{tests}.\\
Der \texttt{application} Ordner enth\"alt alle Dateien der Anwendung. Die wichtigsten Unterordner sind dabei \texttt{models}, \texttt{views} und \texttt{controllers}, welche das MVC-Prinzip realisieren. Zus\"atzlich beinhaltet dieser weitere Ordner \texttt{configs} f\"ur die Konfigurationsaufgaben, \texttt{forms} f\"ur Web-Formulare und \texttt{langs} f\"ur multilinguale Webseiten. Dar\"uber hinaus erlaubt Zend die Unterteilung der Webapplikation in Module, die ihrerseits eine eigene MVC-Struktur aufweisen. Diese Module befinden sich in diesem Fall im Ordner \texttt{application/modules}.\\
\\
Externe Bibliotheken und Klassen, deren Funktionalit\"at nicht in das Model geh\"ort, sowie das Zend-Framework an sich werden im \texttt{library} Ordner gelagert. Dar\"uberhinaus k\"onnen Entwickler in Zend auf die sogennanten \textit{Action Helper} zur\"uckgreifen. Sie helfen Funktionalit\"aten, die in mehreren Actions in den \textit{Action Controller} Einsatz finden, auszulagern und diese zur Laufzeit zur Verf\"ugung zu stellen.\\

Im \texttt{public} Ordner sind dagegen alle \"offentlich zu erreichenden Skripten und Dateien zu finden, z.B. \texttt{index.php}, CSS, JavaScript, Bilder, etc.\cite{bib:zendbuch}[Seite13:Application directory structure]
	
	
	\subsection{Aptana Studio}
	Bei diesem Produkt handelt es sich um eine Open Source Entwicklungsumgebung, welche basierend auf Eclipse - urspr\"unglich als Ajax Entwicklungseditor - heute zus\"atzlich den Einsatz von JavaScript, HTML und PHP u.v.m unterst\"utzt. Als plattformunabh\"angige Software kann Aptana Studio auf den \"ublichen Betriebssystemen wie Linux, Windows und Mac-OS X verwendet werden. Somit wird die Entwicklung ganzer Webapplikationen unter Einsatz differenzierter Programmiersprachen innerhalb nur einer Umgebung erm\"oglicht \cite{bib:aptanaguidedeuling}.\\
Au\ss{}erdem gestattet das Programm den Einsatz von Versionskontrollsystemen wie Git oder SVN zur verteilten Versionsverwaltung von Dateien \cite{bib:aptanameyhoefer}.

	\section{JSON}
	\label{sec:grundjson}
	JSON steht f\"ur "`JavaScript Object Notation"' und wurde von Bob Ippolito im Jahr 2005 vorgestellt \cite{bib:jsonbob}. JSON ist "`ein schlankes Datenaustauschformat, das f\"ur Menschen einfach zu lesen und zu schreiben und f\"ur Maschinen einfach zu parsen (Analysieren von Datenstrukturen) und zu generieren ist. ... Hierbei handelt es sich um universelle Datenstrukturen, die von so gut wie allen modernen Programmiersprachen ... unterst\"utzt werden"' \cite{bib:jsonorg}.\\
Dieses Datenaustauschformat setzt sich aus zwei kostitutiven Strukturen zusammen: Key-Value-Paare und geordnete Listen von Werten (Arrays) und unterst\"utzt die Typen \texttt{object}, \texttt{array}, \texttt{string}, \texttt{number}, \texttt{boolean}, \texttt{null}: \cite{bib:jsonrfc}, \cite{bib:jsonorg}
	
	\begin{itemize}
		\item \textbf{Object}\\
		Ein Objekt wird von zwei geschweiften Klammern umgeben \texttt{\{\}} und besteht auf einer mit Komma (\texttt{,}) getrennten Reihe von Schl\"usseln als \texttt{string} gefolgt von dem Doppelpunkt (\texttt{:}) und einem Wert \texttt{value}.
		
		\begin{figure}[htpd]
			\centering
			\includegraphics[width=11cm]{media/jsonobject.PNG}
			\caption{JSON Objekt \cite{bib:jsonorg}}
			\label{fig:jsonobject}
		\end{figure}
		
		\item \textbf{Array}\\
		Hier befindet sich eine Liste von Werten in der Form \texttt{[ value1, value2, ... ]}.
		
		\item \textbf{Wert (\texttt{value})}\\
		Ein Wert kann einen beliebigen Datentyp annehmen, der von JSON unterst\"utzt wird.
		
		\item \textbf{Zeichenkette (\texttt{string})}\\
		Eine Zeichenkette in JSON kann entweder eine leere Zeichenkette oder eine Reihe von Uni-Code-Zeichen sein. Das Escape-Zeichen spielt hierbei eine besondere Rolle.
		
		\begin{figure}[htpd]
			\centering
			\includegraphics[width=10cm]{media/jsonstring.PNG}
			\caption{JSON String \cite{bib:jsonorg}}
			\label{fig:jsonstring}
		\end{figure}
		
		\item \textbf{Zahl (\texttt{number})}
		Eine Zahl besteht aus einer Folge von Ziffern [1..9] mit dem Vorzeichen (-) f\"ur negative Zahlen. Flie\ss{}kommazahlen werden mit Dezimalpunkt dargestellt. Exponenten k\"onnen durch das Anh\"angen des Buchstaben "`e"' oder "`E"' abgebildet werden.
	\end{itemize}
	
	Weitere Datentypen wie \texttt{Date} werden zu \texttt{string} und \texttt{+\/-Infinity} zu \texttt{null} konvertiert. Der zugriff \"uber die JSON-Objekt-Eigenschaften erfolgt \"uber normalen Attributenzugrif.\\
	Auf Grund der einfachen Syntax und darau\ss{} resultierenden kleineren Dokumentengr\"o\ss{}e, l\"asst sich der Overhead bei der Nutzung JSON im Vergleich zu XML beispielsweise verringern \cite{bib:jsondevelopercom}. Da JSON von JavaScript abgeleitet ist, erzielt man ein weitere Gewinn beim Parsen von JSON-Dokumente \cite{bib:jsondevelopercom}.
	
	\begin{table}[th]
		\centering
		\scalebox{0.9}{
			\begin{tabular}{|l|l|}
				\hline
				% Header
				\multicolumn{1}{|c|}{\textbf{JSON}}	&	\multicolumn{1}{c|}{\textbf{XML}}\\
				% Inhalt
				\hline
				Objektserializierungsformat	&	Auszeichnungsprache\\
				
				\hline
				grundlegende Datentypen & grundlegende und komplexe Datentypen\\
				
				\hline
				Syntax basierend auf JavaScript & hierarchische Strukturierung der Daten\\
				und JavaScript-Objekten					& Verschachtelung von Beginntags und Endtags\\
				
				\hline
				-- & Metadaten und Schema\\
					 & wohlgeformt und selbstbeschreibend\\
				
				\hline
				asynchrone Daten\"ubertragung 			& Interoperabilit\"at:\\
				zwischen Server und Client, 				& plattform- und implementierungsunabh\"angiger\\
				schnelles Generieren und Parsen 		& Austausch zwischen Computersystemen, \\
				$\rightarrow$ Performanz						& Beschreibung von Schnittstellen\\
																						
				\hline
				\"ubersichtliche Notation & un\"ubersichtliche Notation\\
				
				\hline
				geringer Overhead & gro\ss{}er Overhead\\
				
				\hline
				direkte Verschachtelung & Vererbung\\
				
				\hline
				nur Syntaxfehler erkennbar & Validierung (Struktur\"uberpr\"ufung)\\
																	 & und Fehlererkennung m\"oglich\\
																	 & eventuell Fehlerkorrektur\\
																	
				\hline
				JavaScript und JSONiq & XSL-Transformation, \\
															& XPath und XQuery\\
															
				\hline
				\multicolumn{2}{l}{ {\tiny Quellen: \cite{bib:jsonxmlunimainz} \cite{bib:jsonxmlschilder} \cite{bib:jsonxmldebate} \cite{bib:jsonxmlquoderat} \cite{bib:jsonxmlpredic}} }
			\end{tabular}
		}
		\caption{JSON und XML}
		\label{tbl:jsonvsxml}
	\end{table}
	
	
	\section{Zorba}
	\label{sec:zorba}
	Zorba ist eine in C++ geschriebene virtuelle Maschine zur Bearbeitung von Abfragen auf semi-strukturierten Daten wie JSON und XML. Die Software ist unter Apache Lizenz 2.0 gestellt und somit ein Open-Source-Produkt.\\
	Sie unterst\"utzt gleichzeitig zwei verschiedene Syntax (XQuery und JSONiq \footnote{JSONiq ist eine Erweiterung von XQuery f\"ur JSON. \cite{bib:zorbamongowilliam}}) und bietet dadurch die gleichen Operationen auf atomare Datentypen, Kontrollstrukturen wie if-then-else, FLOWER-Operationen sowie einheitliche abstrakte Navigationsmechanismen auf XML und JSON.\\
	
	Des Weiteren ist es mit Zorba m\"oglich, eine komprimierte Verarbeitung von semi-strukturierten Daten durchzuf\"uhren, f\"ur die SQL nicht vorgesehen ist.\\
	Benutzer von Zorba haben sofortigen Zugriff auf diverse Bibliotheken sowie bereits integrierte Funktionen, welche die Abfragen bef\"ahigen, unter anderem mathematische oder String-Operationen auszuf\"uhren. 
	Dar\"uber hinaus erlauben die Konvertierungsbibliotheken (z.B. CSV, PDF, HTML, ZIP), Kommunikationsbibliotheken (z.B. HTTP, SMTP, IMAP) und Verbindungsbibliotheken (z.B. SQLite, JDBC) die produktive Verarbeitung von Webdaten.\\ 
	Ein sehr n\"utzliches Feature von Zorba ist der steckbare (engl. pluggable) beziehungsweise wechselbare Speicher. Standardm\"a\ss{}ig ist der Zorba Core mit dem Main Memory Store (Arbeitsspeicher) verbunden (siehe Abbildung \ref{fig:zorbaarchitektur}). Die Anbindung des Core ist aber frei wechselbar, wodurch die Anwendung besonders flexibel f\"ur den Einsatz in unterschiedlichen technischen Umgebungen ist. Somit k\"onnen viele Datenquellen wie Festplatten, Cloud-Speicher oder Browser verarbeitet werden.\\
	\\
	{\tiny Quellen: \cite{bib:zorba}, \cite{bib:zorbamongowilliam}.}
	
	\begin{figure}[htpd]
			\centering
			\includegraphics[width=9cm]{media/zorbaarchitektur.PNG}
			\caption{Zorba Architektur \cite{bib:zorbamongowilliam}}
			\label{fig:zorbaarchitektur}
		\end{figure}
	
	%	\subsection{XQuery}
		
	% \section{Linq}
	
	\section{NoSQL}
	\label{sec:nosql}
	% Definition und Geschichte
	Die Geschichte der relationalen Datenbanken reicht bis ins Jahr 1970, als \textit{Edgar F. Codd} das "`relationale Modell"' vorgestellte. Im Vergleich dazu ist die Bewegung der NoSQL-Datenbanken mit Beginn in den Neunziger Jahren relativ jung. Der Ansatz der SQL-Datenbanken basiert jedoch auf dem im Jahr 1970 von \textit{Ken Thompson} entwickelten und von AT\&T ver\"offentlichten "`database manager (dbm)"'. DMB ist ein dateibasiertes Datenspeicherungs- und Datenverwaltungssystem mit bekannten Nachfolgern wie "`GNU database manager (gdbm)"' und "`Berkeley DB"' \cite{bib:dbmwiki}. 
	Im Jahre 1998 pr\"agt \textit{Carlo Strozzi} den Begriff NoSQL mit Bedeutung "ohne SQL" f\"ur die Bezeichnung einer von ihm entwickelten Datenbank, die SQL als Abfragesprache nicht unterst\"utzt \cite{bib:strozzi}.\\
	Der heutzutage verwendete Oberbegriff \textit{NoSQL} als Abk\"urzung f\"ur "`Not only SQL"' wird 2009 von \textit{John Oskarsson} ins Leben gerufen und beschreibt eine neue Familie nicht-rationaler und verteilter Datenbanksysteme\cite{bib:oskarsson} \cite{bib:nosqldborg}. Insbesondere die Entstehung von Web2.0 verhilft NoSQL-Produkten zur weiten Verbreitung, da durch die Weiterentwicklung der Nutzer von Konsumenten zu Prosumenten neue kollaborative und interaktive Anforderungen gestellt werden \cite{bib:nosqlwiki}. Systeme wie \textit{Google Big Table} oder \textit{Amazon Dynamo} sind Vorreiter in diesem Bereich.\\
		\\
	% Eigenschaften/Merkmale
	\textit{"`Next Generation Databases mostly addressing some of the points: being non-relational, distributed, open-source and horizontally scalable.\\
The original intention has been modern web-scale databases. [\ldots] Often more characteristics apply such as: schema-free, easy replication support, simple API, eventually consistent / BASE (not ACID), a huge amount of data and more. So the misleading term "`nosql"' [\ldots] should be seen as an alias to something like the definition above"'.} \cite{bib:nosqldborg}\\
	\\
	NoSQL stellt dabei kein einzelnes Produkt oder eine Technologie dar. Es ist vielmehr eine Klasse von Produkten beziehungsweise eine Sammlung von diversen Konzepten zur Datenerhaltung und Datenverwaltung, die von Communitys weiterentwickelt wird und aus diesem Grund Opensource ist, jedoch propriet\"ar \cite{bib:profnosqlbook}[Kapitel 1]. Es ist ein Alias für die n\"achste Generation "`nicht-nur-rationaler"' Datenbanken, welche die Schwachpunkte der stark etablierten relationalen Datenbankmanagementysteme ausgleichen und dennoch nicht als Gegenstr\"omung zu verstehen sind. Das relationale Modell st\"o\ss{}t immer mehr an seine Grenzen in Bezug auf Performanz von Bigdata. Horizontale Skalierungen nehmen auch in einer vertikalen Umgebung immer mehr an Bedeutung zu. Starre Schemata, Relationen und Join-Operationen erweisen sich in vielen Bereichen als aufwendig oder gar als Hindernis.\\

Deshalb stellen die agilen Eigenschaften der NoSQL-Datenbanksysteme, wie flexible Schemafreiheit mit bekanntem Format jedoch frei definierbarem Inhalt, eine bedeutende Alternative dar. Einfache Replikation und horizontale Skalierbarkeit bringen zus\"atzliche Vorteile. Die NoSQL-Community tritt geschlossen gegen ACID\footnote{ACID sind die Grundlegenden Eigenschaften von Transaktionen von relationalen Datenbankmanagmentsysteme und stehen f\"ur: Automaticity (zur Deutsch: Atomarit\"at), Consistency (zur Deutsch: Konsistenz), Isolation und Durability (zur Deutsch: Dauerhaftigkeit). \cite{bib:db2unimainz}\cite{bib:profnosqlbook}} auf. Sie setzt stattdessen BASE ein [sieh Definition NoSQL][\cite{bib:profnosqlbook} Kapitel 9: Managing Transaction and Data]\cite{bib:acidbase}. Das Akronym repr\"asentiert:  \textit{Basically Available}, \textit{Soft State}, \textit{Eventual Consisten}. Es betrachtet die Konsistenz als einen Zustand, der nach einer Reihe von Operationen irgendwann wieder erriecht wird, einen sogenannten losen Zustand (Softstate). Hier spielt die Konsistenz keine zentrale Rolle, daf\"ur jedoch Verf\"ugbarkeit und Performanz.\\
	 %und das auf Grnd (folgendes muss umgeschrieben werden, srry) "`der ge\"anderten Anforderungen an Anwendungen im Web2.0-Zeitalter sowie die Erkenntnisse des CAP-Theorems und der Notwendigkeit, Daten mit verteilten Datenbanksystemen zu verarbeiten, motivieren diesen neuen, optimistischen Konsistenzbegriff, der g\"anzlich ohne Sperren auskommt."'

	NoSQL Produkte lassen sich je nach Konzept in vier Typen aufteilen: \cite{bib:mongodblearn} \cite{bib:heisenosql}
	
	\begin{itemize}
		\item \textbf{Key-Value Datenbanken}\\
		sind die einfachsten NoSQL-Datenbanken. Hier werden die Elemente als Tupel gespeichert. Jedes Element besteht aus einem Schl\"ussel und einem zugeordnetem Wert. Der Wert an sich kann eine beliebige Zeichenkette sein. Somit sind die Elemente durch den Schl\"ussel eindeutig adressiert. "`Key-Value-Datenbanken sind seit jeher Bestandteil von diversen Anwendungen, etwa in Form traditioneller Embedded-Datenbanken der Unix-Welt wie dbm, gdbm und Berkley DB"'.  
		
		\item \textbf{Dokumentenorientierte Datenbanken}\\
		basieren auf dem gleichen Key-Value-Prinzip und lassen die Speicherung komplexer Datenstrukturen als Wert zu. Diese sogenannte Dokumente k\"onnen erneut Key-Value-Paare oder sogar verschachtelte Dokumente enthalten. Beispielsweise nutzt die Firma \textit{Canonicals} CouchDB f\"ur ihren Dienst "`Ubunto One"'.\\
		Auch semi-strukturierte Datenbanken wie XML-Datenbanken geh\"oren zu dieser Gattung.
		
		\item \textbf{Graphen Datenbank}\\
		setzen auf die Graphentheorie, um Beziehungen zwischen den Daten darzustellen. Sie bieten eine gute L\"osung f\"ur Anwendungen, bei welchen die Beziehungen zwischen den Objekten im Mittelpunkt stehen. Hier stellen soziale Netzwerke ein anschauliches Beispiel dar.
				
		\item \textbf{Spaltenorientierte Datenbanken}\\
		sind opimiert f\"ur Abfragen \"uber sehr gro\ss{}e Datenmengen. Sie speichern Spalten von Daten zusammen anstatt von Zeilen. Solche Datenbanken kommen \"uberwiegend bei Data-Mining und Analyseprogrammen zum Einsatz.

	\end{itemize}
		
		\subsection{NoSQL und relationale Datenbanksysteme(SQL)}
		Unternehmen suchen stets nach L\"osungen, um die Anforderungen der neuen Gesch\"aftswelt zu erf\"ullen. Die Koexistenz von relationalen Datenbankmanagementsystemen und NoSQL-Datenbanksystemen ist dabei bedeutsam. Der Datenaustausch und die Interoperabilit\"at werden sich sicherlich weiterentwickeln. Das rasche Voranschreiten dieser alternativen Datenbanken in den letzten Jahren ist ein Beleg f\"ur ihre Attraktivit\"at in der Welt der Bigdata, wo Agilit\"at, Performanz und Skalierbarkeit gefragt sind \cite{bib:zdnetnosql}.
		
		\begin{table}[th]
		\centering
		\scalebox{0.9}{
			\begin{tabular}{|l|l|}
				\hline
				% Header
				\multicolumn{1}{|c|}{\textbf{SQL}}	&	\multicolumn{1}{c|}{\textbf{NoSQL}}\\
				% Inhalt
				\hline
				ein Typ mit 					 & mehrere Typen:Key-Value-, dokumenten-, \\
				geringen Abweichungen	 & graphen- und spaltenorientierte Datenbanken\\
				
				%\hline
				%1970 mit ersten Welle der  & Nach 2000 f\"ur den Umgang mit den Einschr\"nkungen\\
				%Datenspeicherung					 & der SQL Datenbanken: Skalierung, Replikationen\\
																	 %& , Speicherung von strukturlose Daten\\
																	
				\hline
				Daten in Form einer Matrix  					& Spalten- und Zeilenfunktionen\\
				oder Tabelle gespeichert, 						& Datenbankentyp-abh\"angig \\
				Zellen als Relationen/Typen, 			  	& \\
				Spalten als Attribute einer Relation  & \\

				\hline
				starres Schema		&	Struktur frei w\"ahlbar und ver\"anderbar\\
				feste Datentypen	& Datentypen vom Format abh\"angig,\\
													& z.B. JSON-Datentypen\\
				
				\hline
				Prim\"arschl\"ussel und Fremdschl\"ussel	&	eindeutige ID der Elemente,\\
				Joins																			&	Verschachtelung der Daten\\
																									& in komplexen Hierarchien\\
																									
				\hline
				Verticale Skalierung:		& horizontale Skalierung\\
				Aufr\"ustung der Server	& Erweiterung durch weitere Instanzen\\
				
				\hline
				Closedsource und 			& Opensource\\
				Opensource Produkte		& \\
				
				\hline
				ACID	& BASE\\
				
				\hline
				SQL	& objektorientierte  APIs\\
				
				\hline
			\end{tabular}
		}
		\caption{NoSQL-Datenbanksysteme im Vergleich zu relationalen Datenbanksystemen \cite{bib:mongodblearn}}
		\label{tbl:nosqlvssql}
	\end{table}
		
		\subsection{MongoDB}
		\label{subsec:mongodb}
		MongoDB ist eine in C++ geschrebene, plattformunabh\"angige und agile Datenbank, die zur dokumentenorientierten Gattung der NoSQL-Familie geh\"ort und unter GNU AGPL v3.0 bereitgestellt wird. Sie ist schemafrei und unterstützt das JSON-Datenmodell. MongoDB zeichnet sich durch die typischen Eigenschaften einer NoSQL-Datenbank wie hohe Performanz und horizontale Skalierung aus. Die im Jahre 2007 ins Leben gerufene MongoDB bietet aktuell 13 von \textit{Mango Inc.} entwickelte sowie 37 von der gro\ss{}en Community entwickelte Treiber.\\		
		{\tiny Quellen: \url{https://www.mongodb.com/}.}
		